<?php

/* 
 * 微信用户组分组的一般操作，这里只是远程操作，没有加入本地数据库操作
 */
namespace Addons\Jinuser\Controller;
use Home\Controller\AddonsController;

class  WeiusercatController extends AddonsController{
        
        /**
             * curl 函数
             * @param string $url 请求的地址
             * @param string $type POST/GET/post/get
             * @param array $data 要传输的数据
             * @param string $err_msg 可选的错误信息（引用传递）
             * @param int $timeout 超时时间
             * @param array 证书信息
             * @author liw@alltosun.com
             **/
         function go_curl($url, $type, $data = false, &$err_msg = null, $timeout = 30, $cert_info = array())
            {
                $type = strtoupper($type);
                if ($type == 'GET' && is_array($data)) {
                    $data = http_build_query($data);
                }
                $option = array();
                if ( $type == 'POST' ) {
                    $option[CURLOPT_POST] = 1;
                }
                if ($data) {
                    if ($type == 'POST') {
                        $option[CURLOPT_POSTFIELDS] = $data;
                    } elseif ($type == 'GET') {
                        $url = strpos($url, '?') !== false ? $url.'&'.$data :  $url.'?'.$data;
                    }
                }
                $option[CURLOPT_URL]            = $url;
                $option[CURLOPT_FOLLOWLOCATION] = TRUE;
                $option[CURLOPT_MAXREDIRS]      = 4;
                $option[CURLOPT_RETURNTRANSFER] = TRUE;
                $option[CURLOPT_TIMEOUT]        = $timeout;
                //设置证书信息
                if(!empty($cert_info) && !empty($cert_info['cert_file'])) {
                    $option[CURLOPT_SSLCERT]       = $cert_info['cert_file'];
                    $option[CURLOPT_SSLCERTPASSWD] = $cert_info['cert_pass'];
                    $option[CURLOPT_SSLCERTTYPE]   = $cert_info['cert_type'];
                }
                //设置CA
                if(!empty($cert_info['ca_file'])) {
                    // 对认证证书来源的检查，0表示阻止对证书的合法性的检查。1需要设置CURLOPT_CAINFO
                    $option[CURLOPT_SSL_VERIFYPEER] = 1;
                    $option[CURLOPT_CAINFO] = $cert_info['ca_file'];
                } else {
                    // 对认证证书来源的检查，0表示阻止对证书的合法性的检查。1需要设置CURLOPT_CAINFO
                    $option[CURLOPT_SSL_VERIFYPEER] = 0;
                }
                $ch = curl_init();
                curl_setopt_array($ch, $option);
                $response = curl_exec($ch);
                $curl_no  = curl_errno($ch);
                $curl_err = curl_error($ch);
                curl_close($ch);
                // error_log
                if($curl_no > 0) {
                    if($err_msg !== null) {
                        $err_msg = '('.$curl_no.')'.$curl_err;
                    }
                }
                return $response;
            }
        
            
        /*取回客户端远程本身分组，返回数组
         *          
         */
        function getcategry($acces_token ){
            $url = 'https://api.weixin.qq.com/cgi-bin/groups/get?access_token='. $acces_token ;
            $getmercory =$this -> go_curl($url); 
            return $getmercory;
        }
        
        /*  增加远程分组，先检查，没有则添加
         *  参数为要添加的分组名      
         *  */
        function  addcategry($title,$acces_token ){
            if(!S('weixincategory')){
                    $list = $this ->getcategry($acces_token );
                    S('weixincategory', $list, 3600);
		}
                $list = S('weixincategory');
                $seek = strpos($list,$title);
                if(!$seek){
                  $url = 'https://api.weixin.qq.com/cgi-bin/groups/create?access_token='. $acces_token ; 
                  $data =array('group'=>array('name'=>$title));
                  $data = JSON($data);
                  $list = $this -> go_curl($url, 'POST', $data);
                  S('weixincategory', null); 
                  $list = $this ->getcategry($acces_token );
                  S('weixincategory', $list, 3600);
                }
        }
        
        /*   查询用户所在分组,不对则移动过去，没有就创建，
         *   参数为用户opnid，用户组名
         *   返回假则未关注
         * 
         *  */
        function getusercate($opnid ,$acces_token ,$title){
            $url = 'https://api.weixin.qq.com/cgi-bin/groups/getid?access_token='. $acces_token; 
            $data = array('openid'=> $opnid);
            $data = JSON($data);
            $list = $this -> go_curl($url, 'POST', $data);     //查询用户所在分组结果
            $seek = strpos($list,'40003');
            if($seek)  return FALSE;
            $list = json_decode($list, true);
            $this ->addcategry($title,$acces_token );              //没有用户组就增加用户组
            $getmercory = S('weixincategory');
            $getmercory = json_decode($getmercory, true);
            $getmercory = $getmercory['groups'];
            $seek = FALSE  ;  //默认先让他找不到
            foreach ( $getmercory as $k => $v) {
                if($v["name"] == $title){
                    $to_groupid = $v['id'] ;
                     if($v['id']== $list['groupid']){
                        $seek = TRUE ;
                       break ;
                     }   
                }
            }
            if($seek)   return true;
            $this -> updateuser($opnid ,$acces_token ,$to_groupid);
            return true;
        }
        /*  移动用户分组
         *  参数为用户opnid，用户组id
         */
        function  updateuser($opnid ,$acces_token ,$to_groupid){
            
            $url = 'https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token='. $acces_token ; 
            $data = array('openid'=> $opnid ,"to_groupid"=> $to_groupid);
            $data = JSON($data);
            $list = $this -> go_curl($url, 'POST', $data); 
            return json_decode($list);
        }


    
    
    
}